home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
UTILITY
/
XSPAWN.ARJ
/
XSPWNVPE.C
< prev
next >
Wrap
Text File
|
1991-05-04
|
2KB
|
63 lines
/*
* XSPAWN
* Version 1.33
* (C) Copyright 1990 Whitney Software, Inc.
* All Rights Reserved
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include "xspawnp.h"
int xspawnvpe( modeflag, path, argv, envp )
int modeflag; /* execution mode for parent process */
char *path; /* file to be executed */
char *argv[]; /* array of pointers to arguments */
char *envp[]; /* array of pointers to environment strings */
{
register char *e;
register char *p;
char buf[ 80 ];
int rc;
if (( rc = xspawnve( modeflag, path, argv, envp )) != -1 ||
errno != ENOENT || *path == '\\' || *path == '/' ||
*path && *( path + 1 ) == ':' || ( e = getenv( "PATH" )) == NULL )
{
return( rc );
}
for ( ;; e++ )
{
if (( p = strchr( e, ';' )) != NULL )
{
if ( p - e > 66 )
{
e = p;
continue;
}
}
else if ( strlen( e ) > 66 )
return( -1 );
p = buf;
while ( *e && *e != ';' )
*p++ = *e++;
if ( p > buf )
{
if ( *( p - 1 ) != '\\' && *( p - 1 ) != '/' )
*p++ = '\\';
strcpy( p, path );
if (( rc = xspawnve( modeflag, buf, argv, envp )) != -1 ||
errno != ENOENT )
{
return( rc );
}
}
if ( *e == '\0' )
return( -1 );
}
}